using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._PointCloud._Classification
{
    /// <summary>
    /// <para>Set LAS Class Codes Using Features</para>
    /// <para>Classifies LAS points that intersect the two-dimensional extent of input features.</para>
    /// <para>对与输入要素的二维范围相交的 LAS 点进行分类。</para>
    /// </summary>    
    [DisplayName("Set LAS Class Codes Using Features")]
    public class SetLasClassCodesUsingFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SetLasClassCodesUsingFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_las_dataset">
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// </param>
        /// <param name="_feature_class">
        /// <para>Input Feature Class</para>
        /// <para><xdoc>
        ///   <para>One or more input features that will be used to define class code values for the lidar files referenced by the LAS dataset. The classification flag options default to No change but can be assigned by choosing Set or removed by choosing Clear. Each feature has the following options:</para>
        ///   <bulletList>
        ///     <bullet_item>Features—The features used for reclassifying LAS points.</bullet_item><para/>
        ///     <bullet_item>Buffer Distance—The distance that input features are buffered by prior to determining the LAS points that intersect the buffered area.</bullet_item><para/>
        ///     <bullet_item>New Class—The class code to be assigned.</bullet_item><para/>
        ///     <bullet_item>Synthetic—The Synthetic classification flag is used to identify points that were not obtained from a lidar sensor but were included in the .las file, such as survey control points that may not have been captured by the lidar sensor.</bullet_item><para/>
        ///     <bullet_item>KeyPoint—The Model Key Point classification flag represents a subset of points that are required to capture a particular level of detail in the lidar collection. Historically, this flag was associated with representing thinned ground points within a specific z-tolerance.</bullet_item><para/>
        ///     <bullet_item>Withheld—The Withheld classification flag signifies erroneous data that should be excluded from analysis and visualization.</bullet_item><para/>
        ///     <bullet_item>Overlap—The Overlap designation identifies points from overlapping scans and is only supported in LAS 1.4 files.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>一个或多个输入要素，这些要素将用于定义 LAS 数据集所引用的激光雷达文件的类代码值。分类标志选项默认为“无更改”，但可以通过选择“设置”进行分配，也可以通过选择“清除”来删除。每个功能都有以下选项：</para>
        ///   <bulletList>
        ///     <bullet_item>要素 - 用于重分类 LAS 点的要素。</bullet_item><para/>
        ///     <bullet_item>缓冲距离 - 在确定与缓冲区相交的 LAS 点之前，对输入要素进行缓冲的距离。</bullet_item><para/>
        ///     <bullet_item>新班级 - 要分配的班级代码。</bullet_item><para/>
        ///     <bullet_item>合成 - 合成分类标志用于标识未从激光雷达传感器获取但包含在 .las 文件中的点，例如激光雷达传感器可能未捕获的测量控制点。</bullet_item><para/>
        ///     <bullet_item>关键点 （KeyPoint） - 模型关键点分类标志表示捕获激光雷达集合中特定细节级别所需的点的子集。从历史上看，此标志与表示特定 z 容差内变薄的地面点相关联。</bullet_item><para/>
        ///     <bullet_item>保留 - 保留分类标志表示应从分析和可视化中排除的错误数据。</bullet_item><para/>
        ///     <bullet_item>重叠 - 重叠指定可识别重叠扫描中的点，并且仅在 LAS 1.4 文件中受支持。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public SetLasClassCodesUsingFeatures(object _in_las_dataset, object _feature_class)
        {
            this._in_las_dataset = _in_las_dataset;
            this._feature_class = _feature_class;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Set LAS Class Codes Using Features";

        public override string CallName => "3d.SetLasClassCodesUsingFeatures";

        public override List<string> AcceptEnvironments => ["extent", "geographicTransformations", "workspace"];

        public override object[] ParameterInfo => [_in_las_dataset, _feature_class, _compute_stats.GetGPValue(), _derived_las_dataset, _update_pyramid.GetGPValue()];

        /// <summary>
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_las_dataset { get; set; }


        /// <summary>
        /// <para>Input Feature Class</para>
        /// <para><xdoc>
        ///   <para>One or more input features that will be used to define class code values for the lidar files referenced by the LAS dataset. The classification flag options default to No change but can be assigned by choosing Set or removed by choosing Clear. Each feature has the following options:</para>
        ///   <bulletList>
        ///     <bullet_item>Features—The features used for reclassifying LAS points.</bullet_item><para/>
        ///     <bullet_item>Buffer Distance—The distance that input features are buffered by prior to determining the LAS points that intersect the buffered area.</bullet_item><para/>
        ///     <bullet_item>New Class—The class code to be assigned.</bullet_item><para/>
        ///     <bullet_item>Synthetic—The Synthetic classification flag is used to identify points that were not obtained from a lidar sensor but were included in the .las file, such as survey control points that may not have been captured by the lidar sensor.</bullet_item><para/>
        ///     <bullet_item>KeyPoint—The Model Key Point classification flag represents a subset of points that are required to capture a particular level of detail in the lidar collection. Historically, this flag was associated with representing thinned ground points within a specific z-tolerance.</bullet_item><para/>
        ///     <bullet_item>Withheld—The Withheld classification flag signifies erroneous data that should be excluded from analysis and visualization.</bullet_item><para/>
        ///     <bullet_item>Overlap—The Overlap designation identifies points from overlapping scans and is only supported in LAS 1.4 files.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>一个或多个输入要素，这些要素将用于定义 LAS 数据集所引用的激光雷达文件的类代码值。分类标志选项默认为“无更改”，但可以通过选择“设置”进行分配，也可以通过选择“清除”来删除。每个功能都有以下选项：</para>
        ///   <bulletList>
        ///     <bullet_item>要素 - 用于重分类 LAS 点的要素。</bullet_item><para/>
        ///     <bullet_item>缓冲距离 - 在确定与缓冲区相交的 LAS 点之前，对输入要素进行缓冲的距离。</bullet_item><para/>
        ///     <bullet_item>新班级 - 要分配的班级代码。</bullet_item><para/>
        ///     <bullet_item>合成 - 合成分类标志用于标识未从激光雷达传感器获取但包含在 .las 文件中的点，例如激光雷达传感器可能未捕获的测量控制点。</bullet_item><para/>
        ///     <bullet_item>关键点 （KeyPoint） - 模型关键点分类标志表示捕获激光雷达集合中特定细节级别所需的点的子集。从历史上看，此标志与表示特定 z 容差内变薄的地面点相关联。</bullet_item><para/>
        ///     <bullet_item>保留 - 保留分类标志表示应从分析和可视化中排除的错误数据。</bullet_item><para/>
        ///     <bullet_item>重叠 - 重叠指定可识别重叠扫描中的点，并且仅在 LAS 1.4 文件中受支持。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _feature_class { get; set; }


        /// <summary>
        /// <para>Compute statistics</para>
        /// <para><xdoc>
        ///   <para>Specifies whether statistics will be computed for the .las files referenced by the LAS dataset. Computing statistics provides a spatial index for each .las file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, such as classification codes and return information, to values that are present in the .las file.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Statistics will be computed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Statistics will not be computed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为 LAS 数据集引用的 .las 文件计算统计数据。计算统计为每个 .las 文件提供空间索引，从而提高分析和显示性能。统计数据还通过将 LAS 属性（如分类代码和返回信息）的显示限制为 .las 文件中存在的值来增强过滤和符号系统体验。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—将计算统计数据。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—不计算统计数据。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compute statistics")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _compute_stats_value _compute_stats { get; set; } = _compute_stats_value._true;

        public enum _compute_stats_value
        {
            /// <summary>
            /// <para>COMPUTE_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("COMPUTE_STATS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_COMPUTE_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_COMPUTE_STATS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Updated Input LAS Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_las_dataset { get; set; }


        /// <summary>
        /// <para>Update pyramid</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the LAS dataset pyramid will be updated after the class codes are modified.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The LAS dataset pyramid will be updated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The LAS dataset pyramid will not be updated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定修改类代码后是否更新 LAS 数据集金字塔。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将更新 LAS 数据集金字塔。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—LAS 数据集金字塔将不会更新。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update pyramid")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_pyramid_value _update_pyramid { get; set; } = _update_pyramid_value._true;

        public enum _update_pyramid_value
        {
            /// <summary>
            /// <para>UPDATE_PYRAMID</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE_PYRAMID")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_UPDATE_PYRAMID</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_UPDATE_PYRAMID")]
            [GPEnumValue("false")]
            _false,

        }

        public SetLasClassCodesUsingFeatures SetEnv(object extent = null, object geographicTransformations = null, object workspace = null)
        {
            base.SetEnv(extent: extent, geographicTransformations: geographicTransformations, workspace: workspace);
            return this;
        }

    }

}